home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / cli-common / gac-package-install < prev    next >
Text File  |  2009-03-13  |  3KB  |  146 lines

  1. #!/usr/bin/perl
  2.  
  3. #
  4. # Setup
  5. #
  6.  
  7. # Directives
  8. use strict;
  9. use warnings;
  10.  
  11. # Modules
  12. use File::Basename;
  13.  
  14. # This script gets the name of the package as the first parameter.  It
  15. # parses the file given, figures out the black and white listing, then
  16. # installs them as appropriate. If there is a second parameter, this
  17. # is the only CLR installed.
  18.  
  19. #
  20. # Handle the input file
  21. #
  22.  
  23. # Get the package
  24. my $pkg = $ARGV[0];
  25. my $use_clr = $ARGV[1];
  26. my $full = "/usr/share/cli-common/packages.d/$pkg";
  27.  
  28. # Make sure it exists
  29. if ( ! -f "$full.installcligac" )
  30. {
  31.     print STDERR "! $full.installcligac doesn't exist!\n";
  32.     exit 1;
  33. }
  34.  
  35. # Parse the file
  36. unless (open INPUT, "<$full.installcligac")
  37. {
  38.     print STDERR "! Cannot open $full.installcligac ($!)\n";
  39.     exit 2;
  40. }
  41.  
  42. my @dlls = ();
  43. my %blacklist = ();
  44. my %whitelist = ();
  45.  
  46. while (<INPUT>)
  47. {
  48.     # Clean up the line and ignore blanks and comments
  49.     chomp;
  50.     s/^\s+//;
  51.     s/\s+$//;
  52.     next if /^\#/;
  53.     next if /^\s*$/;
  54.  
  55.     # Split on the space
  56.     my @p = split(/\s+/);
  57.  
  58.     # Check the DLL
  59.     my $dll = shift @p;
  60.  
  61.     if (! -f $dll)
  62.     {
  63.     print STDERR "! Assembly $dll does not exist\n";
  64.     exit 3;
  65.     }
  66.  
  67.     push @dlls, $dll;
  68.  
  69.     # Go through the listing
  70.     while (@p)
  71.     {
  72.     # Get it
  73.     my $p = shift @p;
  74.  
  75.     #print "D: List -> $dll: $p\n";
  76.  
  77.     # Add it to the appropriate list. The dll:$dll key is used for
  78.     # sanity checking.
  79.     if ($p =~ s/^-//)
  80.     {
  81.         $blacklist{"$p:$dll"}++;
  82.         $blacklist{"dll:$dll"}++;
  83.     }
  84.     elsif ($p =~ s/^\+//)
  85.     {
  86.         $whitelist{"$p:$dll"}++;
  87.         $whitelist{"dll:$dll"}++;
  88.     }
  89.     }
  90. }
  91.  
  92. # Do some sanity checking
  93. foreach my $dll (@dlls)
  94. {
  95.     if (defined($whitelist{"dll:$dll"}) && defined($blacklist{"dll:$dll"}))
  96.     {
  97.     print STDERR "! $dll has both a white- and blacklist.\n";
  98.     print STDERR "!   Ignoring blacklist.\n";
  99.     }
  100. }
  101.  
  102. # Go through the installation targets
  103. foreach my $clr (glob("/usr/share/cli-common/runtimes.d/*"))
  104. {
  105.     # Ignore temporary files
  106.     next if $clr =~ /~$/;
  107.     next if $clr =~ /^\./;
  108.  
  109.     # Get the "name"
  110.     my $name = basename($clr);
  111.  
  112.     # Get the formal name
  113.     my $formal = `$clr name`;
  114.     $formal = $name if !defined $formal || $formal =~ /^\s*$/;
  115.     chomp($formal);
  116.  
  117.     # Only use the one CLR if given
  118.     next if (defined $use_clr && $name ne $use_clr);
  119.  
  120.     # Figure out the package list
  121.     my @install = ();
  122.  
  123.     foreach my $dll (@dlls)
  124.     {
  125.     # Check the white list
  126.     if (defined $whitelist{"dll:$dll"})
  127.     {
  128.         next if (!defined $whitelist{"$name:$dll"});
  129.     }
  130.     elsif (defined $blacklist{"dll:$dll"})
  131.     {
  132.         next if (defined $blacklist{"$name:$dll"});
  133.     }
  134.  
  135.     # We are going to install this one
  136.     push @install, $dll;
  137.     }
  138.  
  139.     # Install it
  140.     my $t = scalar(@install) . " assemblies";
  141.     $t = "1 assembly" if (@install == 1);
  142.  
  143.     print STDOUT "* Installing $t from $pkg into $formal\n";
  144.     system($clr, "install", $pkg, @install) == 0 or die "E: Installation of $pkg with $clr failed\n";
  145. }
  146.